package cn.study.hashMapTest.hashCode;

import lombok.Data;

import java.util.HashMap;
import java.util.Objects;

/**
 * @Author     ：跟大佳一起学架构
 * @Date       ：Created in 11:22 2024/6/2
 * @Description：为什么对象的equals()被重写，那么对象的hashCode()也要重写？
 */
public class HashCodeTest {
    @Data
    static class User{
        private String name;

        private Integer age;


        @Override
        public boolean equals(Object o) {
            if (this == o)
                return true;
            if (o == null || getClass() != o.getClass())
                return false;
            User user = (User)o;
            return Objects.equals(getName(), user.getName()) && Objects.equals(getAge(), user.getAge());
        }

        @Override
        public int hashCode() {
            return Objects.hash(getName(), getAge());
        }
    }

    public static void main(String[] args) {
        User user1 = new User();
        user1.setAge(18);
        user1.setName("大佳");
        User user2 = new User();
        user2.setAge(18);
        user2.setName("大佳");
        System.out.println(user1.equals(user2));
        HashMap<User, String> hashMap = new HashMap<>(20);
        hashMap.put(user1, "学架构");
        hashMap.put(user2, "学架构2");
        // 因为user1 跟 user2是相等的逻辑。所以他们在hashmap中当做key使用，第二次put会覆盖第一次put的值，size大小为1
        System.out.println(hashMap.size());
    }

}
